package com.hyt.it.ogt.ks.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.ks.model.entity.CandidateLogOther;
import com.hyt.it.ogt.ks.model.vo.CandidateLogBeginTimeVO;
import com.hyt.it.ogt.ks.model.vo.CandidateLogVo;
import com.hyt.it.ogt.opertaion.track.model.OtherLogVO;

/**
 * <p>
 * 轨迹表-其他轨迹表 服务类
 * </p>
 *
 * @author liteng
 * @since 2022-11-22
 */
public interface ICandidateLogOtherService extends IService<CandidateLogOther> {

    /**
     * 保存答题轨迹日志
     * @param otherLogVOList
     * @return
     */
    Boolean saveOtherLog(List<OtherLogVO> otherLogVOList);

    List<CandidateLogBeginTimeVO> getCandidateLogBeginOtherTime(String examId, String operatorType);


    /**
     * 主动发送消息给学生告知结果
     *
     * @param id 轨迹id
     * @return
     */
    void sendApplyCheckResult2StudentByLogOtherId(String id);

    /**
     * 分页查询其它轨迹日志
     * @param examId
     * @param candidateId
     * @param eventType
     * @param logType
     * @param offset
     * @param limit
     * @return
     */
    List<CandidateLogOther> queryAnswerOtherLogByPage(String examId, String candidateId, Integer eventType, Integer logType, Integer offset, Integer limit);

    /**
     * 同步考生其它轨迹状态
     |------------------------------------------------------------|
     |字段名	               | 名称	            |关联的事件         |
     |------------------------------------------------------------|
     |deviceCheckNum	       | 设备检测次数	    | 307 402 211     |
     |------------------------------------------------------------|
     |interruptTime	       | 考试中断时间	       | 205              |
     |------------------------------------------------------------|
     |firstInterruptNum	   | 主监控中断次数	   | 203              |
     |------------------------------------------------------------|
     |secondInterruptNum	   | 移动监控中断次数	| 204             |
     |------------------------------------------------------------|
     |authenticationState   | 0 未验证         | 309 成功 1         |
     |                      | 1 成功           | 207 & 三次  4  失败|
     |                      | 2 人工审核-不通过 | 401 applyResult = 1 成功 -》 3人工审核-通过
     |                      | 3 人工审核-通过   | 401 applyResult = 2 失败 -》 3人工审核-不通过
     |                      | 4 失败          |                   |
     |                      | 5 未开启	     |                   |
     |-----------------------------------------------------------|
     |lastAuthenticationDate| 最后核身时间	 | 208 308 408       |
     |-----------------------------------------------------------|
     |videoMarkNum	       | 视频标记次数	     | 202               |
     |-----------------------------------------------------------|
     |loginNum	           | 登录次数	     | 301 209           |
     |-----------------------------------------------------------|
     |lastLoginTime	       | 最近登录时间	     | 301 209           |
     |-----------------------------------------------------------|
     |firstLoginTime	   | 第一次登录时间	 | 301 209           |
     |-----------------------------------------------------------|
     |maxChangeScreen	  | 切屏最长时长	     | 201               |
     |-----------------------------------------------------------|
     */
    void saveCandidateOtherStatus(List<OtherLogVO> otherLogVOList);

    void syncOtherByExamId(String examId);

    void syncOtherAll();

    /**
     * 查询轨迹最大时间
     * @param examId
     * @param operatorType
     * @return
     */
    List<CandidateLogVo> getMaxTimeByOperateType(String examId, String operatorType);
    /**
     * 查询登录次数大于3的考生
     * @param examId
     * @param operatorType
     * @return
     */
    List<CandidateLogVo> getMaxAndMinTimeByOperateType(String examId, String operatorType);
}
